package com.zoe.onelink.logging.trace.property;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.unit.DataSize;

import java.time.Duration;

/**
 * <p>标题: </p>
 * <p>描述: </p>
 * <p>版权: Copyright (c) 2022</p>
 * <p>公司: 智业软件股份有限公司</p>
 *
 * @version: 1.0
 * @author: ruansheng
 * @date: 2022-10-10
 */
@Data
@ConfigurationProperties(prefix = "onelink.logging.zipkin")
public class OnelinkZipkinProperties {

    /**
     * zipkin日志采集增强
     */
    private boolean enhanceEnabled = false;

    /**
     * 连接超时 (-1 表示使用zipkin默认超时时间: 500ms)
     */
    private int connectTimeoutMillis = -1;

    /**
     * 请求超时 (-1 表示使用zipkin默认超时时间: 500ms)
     */
    private int readTimeoutMillis = -1;

    /**
     * 队列最大span数量
     */
    private int queuedMaxSpans = 1000;

    /**
     * 队列占用内存最大字节数 (默认200MB)
     */
    private DataSize queuedMaxSize = DataSize.ofMegabytes(200);

    /**
     * 每条消息最大字节数 (默认10MB,一条消息对应一个或多个span,通常同一个链路的所有span)
     */
    private DataSize messageMaxSize = DataSize.ofMegabytes(10);

    /**
     * 熔断开关,熔断后不再发起请求直接抛出异常
     */
    private boolean fusingEnabled = false;

    /**
     * 熔断阈值(链路发送错误次数达到阈值触发熔断,默认50)
     */
    private int fusingThreshold = 50;

    /**
     * 熔断时间(默认30秒)
     */
    private Duration fusingTime = Duration.ofSeconds(30);

}
